/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DOM;

import DOM.Estructura.Atributo;
import DOM.Estructura.Encabezado;
import DOM.Estructura.Elemento;
import DOM.Estructura.IComponente;
import DOM.Estructura.Documento;
import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class DomXML {
    private Encabezado  encabezado;
    private Documento   documento;
    private ArrayList<IComponente> pila;


    /**
     * Constructor sin parametros que instancia el encabezado, el documento y la estructura del arbol
     */
    public DomXML(){
        this.encabezado = new Encabezado("xml");
        this.documento  = new Documento("xml_doc");
        this.pila = new ArrayList<IComponente>();
    }

    public DomXML(Encabezado encabezado, Documento documento) {
        this.encabezado = encabezado;
        this.documento = documento;
    }

    /**
     * Devuelve el ultimo elemento del vector que representa la pila
     * @return ultimo elemnto de la pila
     */
    private Elemento getActual() {
        Elemento e = null;

         if (!pila.isEmpty())
            e = (Elemento) (pila.get(pila.size()-1));

        return e;
    }

    /**
     * Retorna el encabezado del documento
     * @return encabezado del documento
     */
    public Encabezado getEncabezado() {
        return encabezado;
    }

    /**
     * Pregunta si la pila tiene elementos, y en caso de tener, quita el último elemento
     */
    public void setFinDeElemento(){
        if (!pila.isEmpty())
            pila.remove(pila.size()-1);
    }

    /**
     * Modifica el contenido de una etiqueta 
     * @param contenido texto que representa el contenido a agregar
     */
    public void setContenido(String contenido, int tipoContenido){
        Elemento e = getActual();
        Atributo valor = new Atributo("", contenido, tipoContenido);
        e.setContenido(valor);
    }

    /**
     * Agrega un elemento del archivo XML a la estructura de memoria y en la pila
     * @param elemento elemento que representa la etiqueta
     */
    public void agregarElementoAlDocumento(IComponente elemento){
        IComponente padre = getActual();
        documento.agregar(padre, elemento);
        pila.add(elemento);
    }
}
